﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Oracle.DataAccess.Client;
using System.Configuration;
using System.Data;
using Entidades.Solicitud;
using Entidades.Graficas;
using InfoSoftGlobal;
using System.Text;

namespace SICOIA.UserControls.Bandejas
{
    public partial class UcBandejaSupervisores : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// getObrasJefeSector
        /// </summary>
        /// <returns></returns>
        public string ObtenerGraficaUno()
        {
            StringBuilder xmlData = new StringBuilder();
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntObraPorSector entObraPorSector = null;
            List<EntObraPorSector> lista = new List<EntObraPorSector>();
            try
            {
                comando = new OracleCommand("PKG_GRAFICAS.getObrasJefeSector", conexion);
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);

                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                xmlData.Append("<chart caption='Estado General de Obras por Sector' formatNumberScale='0' formatNumber='0'  bgColor='#FFFFFF' bgAlpha='80' baseFont='Arial' baseFontSize ='10' baseFontColor ='000000' showValues='1' xAxisName='Activos' yAxisName='Valvulas'>");

                xmlData.Append("<categories>");

                while (lector.Read())
                {
                    entObraPorSector = new EntObraPorSector()
                    {
                        CveUsuario = lector["CVE_USUARIO"].ToString(),
                        Nombre = lector["Nombre"].ToString(),
                        TotalObras = lector["Total_Obras"].ToString(),
                        OBRAS_SIN_DEFINIR_AFECT = lector["OBRAS_SIN_DEFINIR_AFECT"].ToString(),
                        OBRAS_SIN_ATENDER = lector["OBRAS_SIN_ATENDER"].ToString(),
                        OBRAS_EN_PROCESO = lector["OBRAS_EN_PROCESO"].ToString(),
                        ATENDIDAS = lector["ATENDIDAS"].ToString(),
                        MONTO_TOTAL_PENDIENTE = lector["MONTO_TOTAL_PENDIENTE"].ToString()
                    };
                    xmlData.Append("<category label='" + entObraPorSector.Nombre + "' />");
                    lista.Add(entObraPorSector);
                }
                xmlData.Append("</categories>");

                if (lista.Count > 0)
                {
                    xmlData.Append("<dataset seriesName='Atendidas' showValues='0'>");
                    foreach (EntObraPorSector ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.ATENDIDAS + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=4") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='Sin denifir afectados' showValues='0'>");
                    foreach (EntObraPorSector ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_SIN_DEFINIR_AFECT + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=1") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='Sin atender' showValues='0'>");
                    foreach (EntObraPorSector ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_SIN_ATENDER + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=2") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='En proceso' showValues='0'>");
                    foreach (EntObraPorSector ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_EN_PROCESO + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=3") + "' />");
                    }
                    xmlData.Append("</dataset>");
                }

                xmlData.Append("</chart>");
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "ObtenerGraficaUno";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "ObtenerGraficaUno";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;

                if (lector != null)
                    lector.Close();
            }

            return FusionCharts.RenderChartHTML("../FusionCharts/StackedColumn3D.swf", "", xmlData.ToString(), "Obras", "500", "300", false);
        }

        //// Grafica de Obras por Solicitante
        public string ObtenerGraficaDos()
        {
            StringBuilder xmlData = new StringBuilder();
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntObraPorSolicitante entObraPorSolicitante = null;
            List<EntObraPorSolicitante> lista = new List<EntObraPorSolicitante>();
            try
            {
                comando = new OracleCommand("PKG_GRAFICAS.getObrasporSolicitante", conexion);
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);

                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                xmlData.Append("<chart caption='Estado General de Obras por Solicitante' formatNumberScale='0' formatNumber='0'  bgColor='#FFFFFF' bgAlpha='80' baseFont='Arial' baseFontSize ='10' baseFontColor ='000000' showValues='1' xAxisName='Activos' yAxisName='Valvulas'>");

                xmlData.Append("<categories>");

                while (lector.Read())
                {
                    entObraPorSolicitante = new EntObraPorSolicitante()
                    {
                        CveUsuario = lector["CVE_SOLICITANTE"].ToString(),
                        Nombre = lector["DESCRIPCION"].ToString(),
                        TotalObras = lector["Total_Obras"].ToString(),
                        OBRAS_SIN_DEFINIR_AFECT = lector["OBRAS_SIN_DEFINIR_AFECT"].ToString(),
                        OBRAS_SIN_ATENDER = lector["OBRAS_SIN_ATENDER"].ToString(),
                        OBRAS_EN_PROCESO = lector["OBRAS_EN_PROCESO"].ToString(),
                        ATENDIDAS = lector["ATENDIDAS"].ToString(),
                        MONTO_TOTAL_PENDIENTE = lector["MONTO_TOTAL_PENDIENTE"].ToString()
                    };
                    xmlData.Append("<category label='" + entObraPorSolicitante.Nombre + "' />");
                    lista.Add(entObraPorSolicitante);
                }
                xmlData.Append("</categories>");

                if (lista.Count > 0)
                {
                    xmlData.Append("<dataset seriesName='Atendidas' showValues='0'>");
                    foreach (EntBaseGraficaObra ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.ATENDIDAS + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=4&cve_solicitante="+ent.CveUsuario+"") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='Sin denifir afectados' showValues='0'>");
                    foreach (EntBaseGraficaObra ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_SIN_DEFINIR_AFECT + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=1&cve_solicitante=" + ent.CveUsuario + "") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='Sin atender' showValues='0'>");
                    foreach (EntBaseGraficaObra ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_SIN_ATENDER + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=2&cve_solicitante=" + ent.CveUsuario + "") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='En proceso' showValues='0'>");
                    foreach (EntBaseGraficaObra ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_EN_PROCESO + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=3&cve_solicitante=" + ent.CveUsuario + "") + "' />");
                    }
                    xmlData.Append("</dataset>");
                }

                xmlData.Append("</chart>");
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "ObtenerGraficaDos";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "ObtenerGraficaDos";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;

                if (lector != null)
                    lector.Close();
            }

            return FusionCharts.RenderChartHTML("../FusionCharts/StackedColumn3D.swf", "", xmlData.ToString(), "Obras", "500", "300", false);
        }

        //// getTotalPrioritarias
        public string ObtenerGraficaTres()
        {
            StringBuilder xmlData = new StringBuilder();
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntObraPorSolicitante objPrioritarias = null;
            List<EntObraPorSolicitante> lista = new List<EntObraPorSolicitante>();
            try
            {
                comando = new OracleCommand("PKG_GRAFICAS.getTotalPrioritarias", conexion);
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);

                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                xmlData.Append("<chart baseFont='Arial' baseFontSize ='10'  showvalues='0' numberPrefix='' decimals='0' exportAtClient='1' exportHandler='fcExporter1' caption='Total de Obras Prioritarias' xAxisName='Obras' yAxisName='Estado' showValues='0' decimals='0' > ");

                while (lector.Read())
                {
                    objPrioritarias = new EntObraPorSolicitante()
                    {
                        TotalObras = lector["Total_Obras"].ToString(),
                        OBRAS_SIN_DEFINIR_AFECT = lector["OBRAS_SIN_DEFINIR_AFECT"].ToString(),
                        OBRAS_SIN_ATENDER = lector["OBRAS_SIN_ATENDER"].ToString(),
                        OBRAS_EN_PROCESO = lector["OBRAS_EN_PROCESO"].ToString(),
                        ATENDIDAS = lector["ATENDIDAS"].ToString(),
                    };
                }
                xmlData.Append("<set label='Total' value='" + objPrioritarias.TotalObras + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&prioritaria=S") + "'  /> ");
                xmlData.Append("<set label='Atendidas' value='" + objPrioritarias.ATENDIDAS + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&prioritaria=S&cve_estatus_obra=4") + "'/> ");
                xmlData.Append("<set label='Sin Definir Afectados' value='" + objPrioritarias.OBRAS_SIN_DEFINIR_AFECT + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&prioritaria=S&cve_estatus_obra=1") + "' /> ");
                xmlData.Append("<set label='Sin Atender' value='" + objPrioritarias.OBRAS_SIN_ATENDER + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&prioritaria=S&cve_estatus_obra=2") + "'/> ");
                xmlData.Append("<set label='En Proceso' value='" + objPrioritarias.OBRAS_EN_PROCESO + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&prioritaria=S&cve_estatus_obra=3") + "'/> ");


                xmlData.Append("</chart>");
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "ObtenerGraficaDos";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "ObtenerGraficaDos";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;

                if (lector != null)
                    lector.Close();
            }

            return FusionCharts.RenderChartHTML("../FusionCharts/Column3D.swf", "", xmlData.ToString(), "Obras", "500", "300", false);
        }

        // getObrasJefeSectorPrio
        public string ObtenerGraficaCuatro()
        {
            StringBuilder xmlData = new StringBuilder();
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntObraPorSolicitante entObraPorSolicitante = null;
            List<EntObraPorSolicitante> lista = new List<EntObraPorSolicitante>();
            try
            {
                comando = new OracleCommand("PKG_GRAFICAS.getObrasJefeSectorPrio", conexion);
                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);

                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                xmlData.Append("<chart caption='Estado de Obras Prioritarias por Sector' formatNumberScale='0' formatNumber='0'  bgColor='FFFFFF' bgAlpha='80' baseFont='Arial' baseFontSize ='10' baseFontColor ='000000' showValues='1' xAxisName='Activos' yAxisName='Valvulas'>");

                xmlData.Append("<categories>");

                while (lector.Read())
                {
                    entObraPorSolicitante = new EntObraPorSolicitante()
                    {
                        CveUsuario = lector["CVE_USUARIO"].ToString(),
                        Nombre = lector["NOMBRE"].ToString(),
                        TotalObras = lector["Total_Obras"].ToString(),
                        OBRAS_SIN_DEFINIR_AFECT = lector["OBRAS_SIN_DEFINIR_AFECT"].ToString(),
                        OBRAS_SIN_ATENDER = lector["OBRAS_SIN_ATENDER"].ToString(),
                        OBRAS_EN_PROCESO = lector["OBRAS_EN_PROCESO"].ToString(),
                        ATENDIDAS = lector["ATENDIDAS"].ToString(),
                    };
                    xmlData.Append("<category label='" + entObraPorSolicitante.Nombre + "' />");
                    lista.Add(entObraPorSolicitante);
                }
                xmlData.Append("</categories>");

                if (lista.Count > 0)
                {
                    xmlData.Append("<dataset seriesName='Atendidas' showValues='0'>");
                    foreach (EntBaseGraficaObra ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.ATENDIDAS + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=4") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='Sin denifir afectados' showValues='0'>");
                    foreach (EntBaseGraficaObra ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_SIN_DEFINIR_AFECT + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=1") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='Sin atender' showValues='0'>");
                    foreach (EntBaseGraficaObra ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_SIN_ATENDER + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=2") + "' />");
                    }
                    xmlData.Append("</dataset>");

                    xmlData.Append("<dataset seriesName='En proceso' showValues='0'>");
                    foreach (EntBaseGraficaObra ent in lista)
                    {
                        xmlData.Append("<set value='" + ent.OBRAS_EN_PROCESO + "' link='n-" + Server.UrlEncode("../Marcos/ProxyUserControls.aspx?Url=DetalleGraficaObra&cve_usuario=" + ent.CveUsuario + "&cve_estatus_obra=3") + "' />");
                    }
                    xmlData.Append("</dataset>");
                }

                xmlData.Append("</chart>");
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "ObtenerGraficaDos";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "ObtenerGraficaDos";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;

                if (lector != null)
                    lector.Close();
            }

            return FusionCharts.RenderChartHTML("../FusionCharts/StackedColumn3D.swf", "", xmlData.ToString(), "Obras", "500", "300", false);
        }
    }
}